/*
题目描述：把数字翻译成字符串
给定一个数字，按下列规则翻译
0 --> "a"
1 --> "b"
2 --> "c"

一个数字可能有多个翻译方案
例如：
12258
翻译方案：
"bccfi", "bwfi", "bczi", "mcfi", "mzi"
方法：
1. 先将数字转化为字符串
2.从右向左一次计算count值

      1 2 2 5 8
count 5 3 2 1 1
 */
public class E46 {
    public static void main(String[] args) {
        int number = 12258;
        int res = GetTranslationCount(number);
        System.out.println(res);
    }

    public static int GetTranslationCount(int number){
        if(number < 0){
            return 0;
        }
        String numberString = String.valueOf(number);
        return GetTranslationCount(numberString);
    }

    public static int GetTranslationCount(final String number){
        int len = number.length();
        int[] counts = new int[len];
        int count;

        for(int i = len - 1; i >= 0; i--){
            if(i < len - 1){
                count = counts[i + 1];
            }
            else{
                count = 1;
            }
            if(i < len - 1){
                //从右向左计算
                int digit1 = number.charAt(i) - '0';
                int digit2 = number.charAt(i + 1) - '0';
                int converted = digit1 *10 + digit2;
                if(converted >= 10 && converted <= 25){//如果要翻译的数字是一个两位数，并且十位大于0， 说明有两种翻译方案
                    if(i < len - 2){            //如果不是最后两个数，那么需要将后面计算的种类数加上
                        count += counts[i + 2];//隔两位，比如12258， 第一个2位置上的cont值为5位置上的count + 1
                    }
                    else{                       //如果是最后两个数字，直接加1就可以了
                        count += 1;
                    }
                }
            }
            counts[i] = count;
        }

        count = counts[0];
        return count;
    }
}
